从 v1.0以来,第一个 Hyperledger Fabric 主版本,Fabric v2.0为用户和运营商提供了重要的新功能和更改,包括对新应用程序和隐私模式的支持,围绕智能合约对管理增强,操作节点的新选择。

保持不变的是根据您自己的条件升级网络组件的能力,支持从 v1.4.x 开始滚动升级,以及只有在成员组织准备好时才启用新功能的能力。

下面我们就来看看 Fabric v2.0 发布的一些亮点……

##智能合约的去中心化治理
Fabric v2.0 引入了智能合约的去中心化治理,它提供了一个新的流程,用于在您的 Peer 节点上安装链码,并在通道上启动它。新的 Fabric 链码生命周期允许多个组织在它用于与账本交互之前认同链码的参数,例如链码背书策略。对于比以前的生命周期,新的模式有几个改进:

###多组织必须认同链码参数
在 Fabric 1.x 版本中,一个组织有能力为所有其他通道成员设置链码的参数(例如背书策略),这些通道成员只有拒绝安装链码的权力,因此不能参与调用它的事务。新的 Fabric 链码生命周期更加灵活,因为它既支持中心化的信任模式(如以前的生命周期模式),也支持去中心化的模式,去中心化的模式要求在链码于通道上变为活动状态之前,有足够数量的组织就背书策略和其他细节达成一致意见。

###更周密的链码升级过程
在以前的链码生命周期中,升级交易可能由单个组织发出,这会给尚未安装新链码的通道成员带来风险。新的模式允许只有在足够数量的组织批准升级后才能升级链码。

###更简单的背书政策和私有数据收集更新
Fabric生命周期允许您更改背书策略或私有数据收集配置,而无需重新打包或重新安装链码。用户还可以利用新的默认背书策略,该策略要求获得通道上大多数组织的背书。在通道中添加或删除组织时,会自动更新此策略。

###可被检查的链码包
Fabric生命周期将链码封装在易于阅读的 tar 文件中。这使得检查链码包和跨多个组织协调安装变得更加容易。

###使用一个包在通道上启动多个链码
以前的生命周期在安装链码包时使用指定的名称和版本定义通道上的每个链码。您现在可以使用单个链码包,并以不同的名称在同一通道或不同通道上多次部署它。例如,如果您想在链码自己的“副本”中跟踪不同类型的资产。

###链码包不需要在通道成员之间相同
组织可以用他们自己的用例扩展链码,例如为了他们组织的利益执行不同的验证。只要所需数量的组织为链码交易背书和结果相匹配,该交易将被验证并提交到帐本中。这还允许组织按照自己的时间表单独推出小的修补程序,而不需要整个网络同步进行。

##使用新的链码生命周期
对于现有的 Fabric 部署,您可以继续使用 Fabric v2.0 之前的链码生命周期。新的链码生命周期只有在通道应用程序功能更新到 v2.0 时才会生效。 关于新的链码生命周期完整细节教程请看 Chaincode for Operators

用于协作和共识的新链码应用程序模式

支持新的链码生命周期管理的相同的去中心化的达成协议的方法也可以用于您自己的链码应用程序中,以确保组织在数据交易被提交到帐本之前同意它们。

####自动检查
如上所述,组织可以在链码功能中添加自动检查,以便在背书事务提案之前验证附加信息。

####去中心化协议
链码可能要求来自不同组织的参与者在账本交易中指明他们的协议条款和条件。然后,最终的链码提案可以验证来自所有单个交易者的条件是否得到满足,并最终在所有通道成员之间“解决”业务交易。有关以非公开方式指示条款和条件的具体示例,请参见资产转移场景,于文档中 私有数据.

##私有数据增强
Fabric v2.0还支持使用和共享私有数据的新模式,而不需要为所有可能要进行交易的通道成员组合创建私有数据集合。具体地说,您不是在多个成员的集合中共享私有数据,而是可能想要跨集合共享私有数据,其中每个集合可能包括单个组织,或者带有一个监管者或审计师的单个组织。

Fabric v2.0 中的几个增强使得这些新的私有数据模式成为可能:

###共享和验证私有数据
当私有数据与不是集合成员的通道成员共享时,或者与包含一个或多个通道成员的另一个私有数据集合共享时(通过向该集合写入密钥),接收方可以利用 GetPrivateDataHash() 链码 API 验证私有数据是否与以前交易中被创建的来自私有数据的链上哈希匹配。

###集合水平的背书策略
现在可以选择使用背书策略来定义私有数据集合,该背书策略覆盖集合内密钥的链码级别背书策略。该特性可用于限制哪些组织可以将数据写入集合,并且正是它启用了前面提到的新的链码生命周期和链码应用程序模式。例如,您可能有一个链码背书策略,该策略要求大多数组织背书,但对于任何给定的交易,您可能需要两个交易处理组织在它们自己的私有数据集合中单独背书它们的协议。

###每个组织的隐式集合
如果您想利用每个组织的私有数据模式,那么在 Fabric v2.0 中部署链码时甚至不需要定义集合。不需要任何前期定义就可以使用隐式的特定组织集合。
了解更多关于新的私有数据模式请看 私有数据 (概念文档). 更多关于私有数据集合配置和隐式集合请看 Private Data (参考文档).

##外部的链码启动器
外部链码启动器功能使运营商能够使用他们选择的技术构建和启动链码。不需要使用外部构建器和启动器,因为默认行为构建和运行链码的方式与使用 Docker API 的先前版本相同。

###消除 Docker
守护进程依赖 Fabric 以前的版本要求 Peer 节点能够访问 Docker 守护进程,以便构建和启动链码——由于 Peer 节点进程所需的特权,这在生产环境中可能是不可取的。

###容器的替代品
不再要求链码在 Docker 容器中运行,可以在运营商选择的环境(包括容器)中执行。

###外部构建器可执行文件
操作员可以提供一组外部构建器可执行文件,以覆盖 Peer 节点构建和启动链码方式。

###作为外部服务的链码
传统上,链码由 Peer 节点启动,然后连接回 Peer 节点。现在可以将链码作为外部服务运行,例如在 Kubernetes pod 中, Peer 节点可以连接到该 pod,并利用该 pod 执行链码。了解更多信息请看 Chaincode as an external service
了解更多关于外部链码启动功能请看 External Builders and Launchers

##用于提高 CouchDB 性能的状态数据库缓存
在使用外部 CouchDB 状态数据库时,背书和验证阶段的读取延迟历来是性能瓶颈。
在 Fabric v2.0 中,一个新的 Peer 节点缓存用快速的本地缓存读取取代了许多昂贵的查找。可以使用 core.yaml 文件中的属性 cachesize 来配置缓存大小。

##基于 Alpine 的 docker 镜像
从 v2.0 开始,Hyperledger Fabric Docker 镜像将使用 Alpine Linux 作为基础镜像,这是一个面向安全的轻量级 Linux 发行版。这意味着 Docker 镜像现在要小得多,提供更快的下载和启动时间,以及占用主机系统上更少的磁盘空间。Alpine Linux 的设计从一开始就考虑到了安全性,Alpine 发行版的最小化特性大大降低了安全漏洞的风险。

##示例测试网络
Fabric-Samples 仓库现在包括一个新的 Fabric 测试网络。测试网络被构建为模块化的和用户友好的示例 Fabric 网络,这使测试您的应用程序和智能合约变得容易。除了 Cryptogen 之外,该网络还支持使用 Certificate Authorities 部署网络的能力。

了解更多关于这个网络的信息,请查看 Using the Fabric test network.

##升级到 Fabric v2.0
一个主要的新版本带来了一些额外的升级注意事项。不过请放心,我们支持从 v1.4.x 到 v2.0 的滚动升级,因此可以一次升级一个网络组件而不会停机。

升级文档得到了显著的扩展和修改,现在在文档中有了一个独立的主页 Upgrading to the latest release. 这里您将会发现文档
Upgrading your componentsUpdating the capability level of a channel, 以及对升级到 v2.0 的注意事项的具体了解, Considerations for getting to v2.0